// 题目链接：https://www.luogu.com.cn/problem/P1596

#include <iostream>

using namespace std;

const int N = 100;
const int M = 100;
int n, m;
int res = 0;   // 保存结果
char g[N][M];  // 记录网格图
bool st[N][M]; // 记录每个网格是否被走过

// 存储走的方向，有八个方向
int dx[] = {-1, -1, -1, 0, 0, 1, 1, 1};
int dy[] = {-1, 0, 1, -1, 1, -1, 0, 1};

// (x,y)表示当前所在网格坐标
void DFS(int x, int y)
{
    // 遍历八个方向的网格
    for (int i = 0; i < 8; ++i)
    {
        // 计算下一步所处的网格的坐标
        int next_x = x + dx[i];
        int next_y = y + dy[i];

        // 如果网格坐标不合法，则不走
        if (next_x < 0 || next_x >= n || next_y < 0 || next_y >= m)
            continue;
        // 如果网格里不是水，则不走
        if (g[next_x][next_y] != 'W')
            continue;
        // 如果网格已经被走过，则不走
        if (st[next_x][next_y])
            continue;

        // 到这里就代表可以走到这一个网格，再继续走到下一个网格
        st[next_x][next_y] = true;
        DFS(next_x, next_y);
    }
}

int main()
{
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; ++i)
    {
        scanf("%s", g[i]);
    }

    // 依次遍历每个网格
    for (int i = 0; i < n; ++i)
    {
        for (int j = 0; j < m; ++j)
        {
            // 如果这个网格里是水，并且没有被走过，说明这是一个新的水坑，则走到这一个网格，并且水坑数加1
            if (g[i][j] == 'W' && st[i][j] == false)
            {
                ++res;
                st[i][j] = true;
                DFS(i, j);
            }
        }
    }

    printf("%d\n", res);

    return 0;
}